import java.io.ObjectInputStream;

// 实现一个自定义的单向链表
public class MyLink {

    private Node root; // 根节点

    public void insertEnd(String data) {

        // 把data封装成Node节点
        Node node = new Node(data);

        // 判断根节点是否有值
        if (root == null) {
            root = node;
            return;
        }

        // 如果根节点不为空，说明被占用了，就只能往后找了
        // 从根节点一直往下找，知道找到某个节点为空，说明可以保存在这里
        Node current = root;
        while (current.next != null) { // 不为空说明当前节点已经有数据了，不能放
            current = current.next; // 找一下节点
        }

        // 到这里说明找到了一个为空的节点
        current.next = node;
    }

    public void print() {
        Node current = root;
        while (current != null) {
            System.out.println(current.data);
            current = current.next;
        }
    }

    public void insertHead(String data) {
        // 把数据封装到Node对象
        Node node = new Node(data);

        // 判断根节点是否有值
        if (root == null) {
            root = node;
            return;
        }

        // 新节点的下一个根节点
        node.next = root;

        // 把新节点变成根节点
        root = node;
    }

    // 内部类
    class Node {
        private Object data; // 保存数据的

        private Node next; // 下一个节点，因为下一个节点也是Node，所以它是Node类型

        // 定义一个构造器来给Node赋值
        public Node(String data) {
            this.data = data;
        }
    }
}
